﻿namespace GraphDrawing.Graph.Behaviors
{
    public interface IGraphObjectViewContainer
    {
        /// <summary>
        /// Возвращает представление объекта.
        /// </summary>
        /// <typeparam name="T">Тип запрашиваемого представления.</typeparam>
        /// <param name="key">Ключ объекта представления.</param>
        /// <returns>Возвращает представление.</returns>
        T GetView<T>(object key = null);

        /// <summary>
        /// Регистрирует представление в контейнере.
        /// </summary>
        /// <typeparam name="T">Тип представления.</typeparam>
        /// <param name="view">Экземпляр представления.</param>
        /// <param name="key">Ключ регистрации представления.</param>
        void Add<T>(T view, object key = null);

        /// <summary>
        /// Удаляет объект указанного типа из контейнера по ключу.
        /// </summary>
        /// <typeparam name="T">Тип объекта.</typeparam>
        /// <param name="key">Ключ объекта.</param>
        void Remove<T>(object key = null);
    }
}